from pathlib import Path
import matplotlib.pyplot as plt
import mpl_toolkits.axes_grid1
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import pandas as pd
from PIL import Image
from qfit import make_angle_file as maf
from qfit import fit_q
from qfit import re_analysis as rean
from qfit import re_plot as replt
from qfit import multiplot as mlplt
from qfit import image_treat as imt
from qfit import file_folder_trans as fft
import warnings
warnings.simplefilter('ignore')
# warnings.resetwarnings()
# warnings.simplefilter('ignore', FutureWarning)
%load_ext autoreload
%autoreload 2
plt.rcParams["font.size"] = 16
# plt.rcParams['font.family']= 'sans-serif'
# plt.rcParams['font.sans-serif'] = ['Arial']
# RC triming and ratation Folder
# [0,p120,m120]
rot_tr=['c4_gauss_fit/rot_tr_gaussian_220614_100214',
'c4_gauss_fit/rot_tr_gaussian_220614_110511',
'c4_gauss_fit/rot_tr_gaussian_220614_104721']
# load
rc0 = rean.load_rc_tif(rot_tr[0])
rcp120 = rean.load_rc_tif(rot_tr[1])
rcm120 = rean.load_rc_tif(rot_tr[2])
mlplt.rc_2plots(rc0, title='$\psi$ = 0$^{\circ}$',
peak_range=(-0.25,0.25), width_range=(0,0.02),
ext='png',save=False)
mlplt.rc_2plots(rcp120, title='$\psi$ = 120$^{\circ}$',
peak_range=(-0.25,0.25), width_range=(0,0.02),
ext='png',save=False)
mlplt.rc_2plots(rcm120, title='$\psi$ = -120$^{\circ}$',
peak_range=(-0.25,0.25), width_range=(0,0.02),
ext='png',save=False)
mlplt.rc_3plots(rc0, title='$\psi$ = 0$^{\circ}$',
peak_range=(-0.3,0.3), width_range=(0,0.05),
save=False)
from qfit import d_limit as dlim
gan_param = {"ramda":1.284, 'd':1.004, 'dp':0.05,'L':500, 'drr':2.8e-04}
dlim.limit_estimate(**gan_param)
Limit: 5.911136e-05, thB: 39.75024063966996, th2B: 79.50048127933992
5.911136331169347e-05
dlim.limt_calc_4plot(data=rc0, title='Limit $\Delta$d/d $\cdot$ $\Delta\Psi$ at $\psi=0$',
dd_xange=(0,1.0e-4), dp_xange=(0,3e-3), **gan_param,
limit_line =False, save=False, ext='png')
# ** means unpacked dict
Limit: 5.911136e-05, thB: 39.75024063966996, th2B: 79.50048127933992
def freqency_histgram(data, dd_xange=(0,1.0e-4), dp_xange=(0,3e-3),
ramda=1.284, d=1.004, dp=0.05, L=500, drr=2.8e-04, pixel_size=0.05,
plot=True):
# relative frequency
#Bragg angle:thB-> d = ramda/(sin(tha+th2B))
thB = np.rad2deg(np.arcsin(ramda/(2*d)))
d_side = ramda/(2*np.sin(np.deg2rad(data['ct']+thB)))
# pixel difference
dd_d = np.abs(np.diff(d_side, prepend=0)/d)
dpsi_v = np.abs(np.diff(data['ct'], axis=0, prepend=0))
dd_d = dd_d.reshape(-1)
dd_d = dd_d[~np.isnan(dd_d)]
weights_dd_d = np.ones_like(dd_d) / len(dd_d)
dpsi_v = dpsi_v.reshape(-1)
dpsi_v = dpsi_v[~np.isnan(dpsi_v)]
weights_dpsi_v = np.ones_like(dpsi_v) / len(dpsi_v)
dd_hist, dd_bins = np.histogram(dd_d,range=dd_xange, bins=100, weights=weights_dd_d)
dpsi_hist, dpsi_bins = np.histogram(dpsi_v,range=dp_xange, bins=100,weights=weights_dpsi_v)
dd_hist_cum = dd_hist.cumsum()
dp_hist_cum = dpsi_hist.cumsum()
if plot:
fig = plt.figure(figsize = (10,8))
ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)
ax4 = fig.add_subplot(2, 2, 4)
ax1.plot(dd_bins[:-1], dd_hist)
ax2.plot(dd_bins[:-1], dd_hist.cumsum())
ax3.plot(dpsi_bins[:-1], dpsi_hist)
ax4.plot(dpsi_bins[:-1], dpsi_hist.cumsum())
ax1.ticklabel_format(style="sci", axis="x", scilimits=(0,0))
ax2.ticklabel_format(style="sci", axis="x", scilimits=(0,0))
ax3.ticklabel_format(style="sci", axis="x", scilimits=(0,0))
ax4.ticklabel_format(style="sci", axis="x", scilimits=(0,0))
ax1.set_title('$\Delta$d/d ')
ax2.set_title('$\Delta$d/d cumulative sum')
ax3.set_title('$\Delta\Psi$ histgram')
ax4.set_title('$\Delta\Psi$ cumulative sum')
ax1.grid(True)
ax2.grid(True)
ax3.grid(True)
ax4.grid(True)
plt.tight_layout()
plt.show()
print('$\Delta$d/d max count:'+ f'{np.percentile(dd_hist_cum,100):.3f}')
print(f'$\Delta\Psi$ max count:{np.percentile(dp_hist_cum,100):.3f}')
return dd_hist, dd_bins, dpsi_hist, dpsi_bins
def getNearestValue(target_list, num):
""" return the value closest to a value from a list
args:
target_list(list or ndarray): target Data array
num(float): Target value
returns:
closest value to the target value
"""
# Get the index of the smallest value by calculating the difference between the list element and the target value
idx = np.abs(np.asarray(target_list) - num).argmin()
return idx
def cusum_values(hist, bins, target,):
#cusum_values(dd_hist, dd_bins, 0.59e-4 )
ind = getNearestValue(bins, target)
print(f'{hist.cumsum()[ind]:.3f}')
dd_hist, dd_bins, dpsi_hist, dpsi_bins = freqency_histgram(data=rc0,
dd_xange=(0,2.5e-4),dp_xange=(0,6e-3),
**gan_param
)
$\Delta$d/d max count:0.990 $\Delta\Psi$ max count:0.970
cusum_values(dd_hist,dd_bins, 0.59e-4, )
cusum_values(dpsi_hist, dpsi_bins, 0.0057 )
0.862 0.967
# radial quality evaluation
from qfit import radial_average as rda
# find center and radius using height image of RC
# create binary image astype uint8
b_h_img = rda.image2uint8(rc0['h'])
# 4inch area size-> 2500000, 2inch -> 60000, at pixel size 0.05mm
hc_lists, hr_lists, ha_lists = rda.find_circle(b_image=b_h_img, area_size=4000)
Circle center: (1077, 1045), Radius: 1012, Area: 3075980.5
# psi=0
r0_dsi, r0_dri = rda.calc_circle_radius_ave(org_image=rc0['wt'], center=hc_lists[0], max_radius=hr_lists[0],
dr=100, pixel_size=0.05, fig_show=True, ylim=(0.01,0.02))
# b_h_img = rda.image2uint8(rc0['h'])
# hc_lists, hr_lists, ha_lists = rda.find_circle(b_image=b_h_img, area_size=400000)
rm120dsi, rm120dri = rda.calc_circle_radius_ave(org_image=rcm120['wt'], center=hc_lists[0], max_radius=hr_lists[0],
dr=100, pixel_size=0.05, fig_show=True, ylim=(0.01,0.02))
rp120dsi, rp120dri = rda.calc_circle_radius_ave(org_image=rcp120['wt'], center=hc_lists[0], max_radius=hr_lists[0],
dr=100, pixel_size=0.05, fig_show=True, ylim=(0.01,0.02))
rda.r_dr_3data_plot(r0_dsi,r0_dri,rp120dsi,rp120dri,rm120dsi,rm120dri,
ylim=(0.01,0.02),
title='r $\cdot$ $\Delta r$',
save=True)
q_data =[r'c4_gauss_fit/2R_0m120',
r'c4_gauss_fit/2R_0p120',
r'c4_gauss_fit/2R_pm120']
q_0p = rean.load_q_tif(q_data[0])
q_0m = rean.load_q_tif(q_data[1])
q_pm = rean.load_q_tif(q_data[2])
mlplt.qc_4plots(q_0m, title='gw_q$_x$, q$_y$ at (0,m120)',
qx_range=(-0.03,0.03),qy_range=(-0.03,0.03),
save=False)
mlplt.qc_4plots(q_0p, title='gw_q$_x$, q$_y$ at (0,p120)',
qx_range=(-0.03,0.03),qy_range=(-0.03,0.03),
save=False)
mlplt.qc_4plots(q_pm, title='gw_q$_x$, q$_y$ at (p120,m120)',
qx_range=(-0.03,0.03),qy_range=(-0.03,0.03),
save=False)
mlplt.qp3_4plots(q_0m, title='$q_r$,$q_{\\theta}$,$q_{\phi}$', step=150)
# average q
ave_q = rean.average_3q(q_0p, q_0m, q_pm)
mlplt.qc_4plots(ave_q, title='q$_x$, q$_y$ average',
qx_range=(-0.03,0.03),qy_range=(-0.03,0.03),
save=False)
mlplt.qp3_4plots(ave_q, title='$q_r$,$q_{\\theta}$,$q_{\phi}$ average', step=150, save=False)